File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BNG {
/// <summary>
/// This component is used to pull grab items toward it, and then reset it's position when not being grabbed
/// </summary>
public class HandleHelper : MonoBehaviour {
public Rigidbody ParentRigid;
/// <summary>
/// The Transform that is following us
/// </summary>
public Transform HandleTransform;
Grabbable thisGrab;
Rigidbody rb;
bool didRelease = false;
Collider col;
void Start() {
thisGrab = GetComponent<Grabbable>();
thisGrab.CanBeSnappedToSnapZone = false;
rb = GetComponent<Rigidbody>();
col = GetComponent<Collider>();
// Handle and parent shouldn't collide with each other
if(col != null && ParentRigid != null && ParentRigid.GetComponent<Collider>() != null) {
Physics.IgnoreCollision(ParentRigid.GetComponent<Collider>(), col, true);
}
}
Vector3 lastAngularVelocity;
void FixedUpdate() {
if(!thisGrab.BeingHeld) {
if(!didRelease) {
//col.enabled = false;
transform.localPosition = Vector3.zero;
transform.localRotation = Quaternion.identity;
transform.localScale = Vector3.one;
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
if (ParentRigid) {
// ParentRigid.velocity = Vector3.zero;
// ParentRigid.angularVelocity = Vector3.zero;
ParentRigid.angularVelocity = lastAngularVelocity * 20;
}
col.enabled = true;
StartCoroutine(doRelease());
didRelease = true;
}
}
else {
// Object is being held, need to fire release
didRelease = false;
// Check Break Distance since we are always holding the helper
if (thisGrab.BreakDistance > 0 && Vector3.Distance(transform.position, HandleTransform.position) > thisGrab.BreakDistance) {
thisGrab.DropItem(false, false);
}
lastAngularVelocity = rb.angularVelocity * -1;
}
}
private void OnCollisionEnter(Collision collision) {
// Handle Helper Ignores All Collisions
Physics.IgnoreCollision(col, collision.collider, true);
}
IEnumerator doRelease() {
//for(int x = 0; x < 120; x++) {
// ParentRigid.angularVelocity = new Vector3(10, 1000f, 50);
// yield return new WaitForFixedUpdate();
//}
yield return new WaitForSeconds(1f);
col.enabled = true;
}
}
}